From 05f953b02a30b6b329fe0223c81e7a2c38448c3f Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Mon, 9 Aug 2004 09:40:14 +0000 Subject: [PATCH] bitkeeper revision 1.1159.1.14 (4117467elQav6yf21P_6arzR_7_87A) Adjust timeofday for tick interrupts that we haven't taken yet. --- linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c b/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c index 70d6a823c7..f79a78ab5c 100644 --- a/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c +++ b/linux-2.6.7-xen-sparse/arch/xen/i386/kernel/time.c @@ -174,6 +174,7 @@ void do_gettimeofday(struct timeval *tv) unsigned long seq; unsigned long usec, sec; unsigned long max_ntp_tick; + unsigned long flags; do { unsigned long lost; @@ -198,6 +199,9 @@ void do_gettimeofday(struct timeval *tv) else if (unlikely(lost)) usec += lost * (USEC_PER_SEC / HZ); + usec += (unsigned long)((shadow_system_time - + processed_system_time) / NSEC_PER_USEC); + sec = xtime.tv_sec; usec += (xtime.tv_nsec / NSEC_PER_USEC); @@ -209,9 +213,9 @@ void do_gettimeofday(struct timeval *tv) * overflowed). Detect that and recalculate * with fresh values. */ - write_seqlock_irq(&xtime_lock); + write_seqlock_irqsave(&xtime_lock, flags); __get_time_values_from_xen(); - write_sequnlock_irq(&xtime_lock); + write_sequnlock_irqrestore(&xtime_lock, flags); continue; } } while (read_seqretry(&xtime_lock, seq)); @@ -273,6 +277,8 @@ int do_settimeofday(struct timespec *tv) */ nsec -= (jiffies - wall_jiffies) * TICK_NSEC; + nsec -= (unsigned long)(shadow_system_time - processed_system_time); + wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); -- 2.30.2